home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / include / linux / fs.h < prev    next >
Encoding:
C/C++ Source or Header  |  2009-09-09  |  11.3 KB  |  292 lines

  1. #ifndef _LINUX_FS_H
  2. #define _LINUX_FS_H
  3.  
  4. /*
  5.  * This file has definitions for some important file table
  6.  * structures etc.
  7.  */
  8.  
  9. #include <linux/limits.h>
  10. #include <linux/ioctl.h>
  11.  
  12. /*
  13.  * It's silly to have NR_OPEN bigger than NR_FILE, but you can change
  14.  * the file limit at runtime and only root can increase the per-process
  15.  * nr_file rlimit, so it's safe to set up a ridiculously high absolute
  16.  * upper limit on files-per-process.
  17.  *
  18.  * Some programs (notably those using select()) may have to be 
  19.  * recompiled to take full advantage of the new limits..  
  20.  */
  21.  
  22. /* Fixed constants first: */
  23. #undef NR_OPEN
  24. extern int sysctl_nr_open;
  25. #define INR_OPEN 1024        /* Initial setting for nfile rlimits */
  26.  
  27. #define BLOCK_SIZE_BITS 10
  28. #define BLOCK_SIZE (1<<BLOCK_SIZE_BITS)
  29.  
  30. #define SEEK_SET    0    /* seek relative to beginning of file */
  31. #define SEEK_CUR    1    /* seek relative to current file position */
  32. #define SEEK_END    2    /* seek relative to end of file */
  33. #define SEEK_MAX    SEEK_END
  34.  
  35. /* And dynamically-tunable limits and defaults: */
  36. struct files_stat_struct {
  37.     int nr_files;        /* read only */
  38.     int nr_free_files;    /* read only */
  39.     int max_files;        /* tunable */
  40. };
  41. extern struct files_stat_struct files_stat;
  42. extern int get_max_files(void);
  43.  
  44. struct inodes_stat_t {
  45.     int nr_inodes;
  46.     int nr_unused;
  47.     int dummy[5];        /* padding for sysctl ABI compatibility */
  48. };
  49. extern struct inodes_stat_t inodes_stat;
  50.  
  51. extern int leases_enable, lease_break_time;
  52.  
  53. #ifdef CONFIG_DNOTIFY
  54. extern int dir_notify_enable;
  55. #endif
  56.  
  57. #define NR_FILE  8192    /* this can well be larger on a larger system */
  58.  
  59. #define MAY_EXEC 1
  60. #define MAY_WRITE 2
  61. #define MAY_READ 4
  62. #define MAY_APPEND 8
  63. #define MAY_ACCESS 16
  64. #define MAY_OPEN 32
  65.  
  66. /*
  67.  * flags in file.f_mode.  Note that FMODE_READ and FMODE_WRITE must correspond
  68.  * to O_WRONLY and O_RDWR via the strange trick in __dentry_open()
  69.  */
  70.  
  71. /* file is open for reading */
  72. #define FMODE_READ        ((fmode_t)1)
  73. /* file is open for writing */
  74. #define FMODE_WRITE        ((fmode_t)2)
  75. /* file is seekable */
  76. #define FMODE_LSEEK        ((fmode_t)4)
  77. /* file can be accessed using pread */
  78. #define FMODE_PREAD        ((fmode_t)8)
  79. /* file can be accessed using pwrite */
  80. #define FMODE_PWRITE        ((fmode_t)16)
  81. /* File is opened for execution with sys_execve / sys_uselib */
  82. #define FMODE_EXEC        ((fmode_t)32)
  83. /* File is opened with O_NDELAY (only set for block devices) */
  84. #define FMODE_NDELAY        ((fmode_t)64)
  85. /* File is opened with O_EXCL (only set for block devices) */
  86. #define FMODE_EXCL        ((fmode_t)128)
  87. /* File is opened using open(.., 3, ..) and is writeable only for ioctls
  88.    (specialy hack for floppy.c) */
  89. #define FMODE_WRITE_IOCTL    ((fmode_t)256)
  90.  
  91. #define RW_MASK        1
  92. #define RWA_MASK    2
  93. #define READ 0
  94. #define WRITE 1
  95. #define READA 2        /* read-ahead  - don't block if no resources */
  96. #define SWRITE 3    /* for ll_rw_block() - wait for buffer lock */
  97. #define READ_SYNC    (READ | (1 << BIO_RW_SYNC))
  98. #define READ_META    (READ | (1 << BIO_RW_META))
  99. #define WRITE_SYNC    (WRITE | (1 << BIO_RW_SYNC))
  100. #define SWRITE_SYNC    (SWRITE | (1 << BIO_RW_SYNC))
  101. #define WRITE_BARRIER    (WRITE | (1 << BIO_RW_BARRIER))
  102. #define DISCARD_NOBARRIER (1 << BIO_RW_DISCARD)
  103. #define DISCARD_BARRIER ((1 << BIO_RW_DISCARD) | (1 << BIO_RW_BARRIER))
  104.  
  105. #define SEL_IN        1
  106. #define SEL_OUT        2
  107. #define SEL_EX        4
  108.  
  109. /* public flags for file_system_type */
  110. #define FS_REQUIRES_DEV 1 
  111. #define FS_BINARY_MOUNTDATA 2
  112. #define FS_HAS_SUBTYPE 4
  113. #define FS_REVAL_DOT    16384    /* Check the paths ".", ".." for staleness */
  114. #define FS_RENAME_DOES_D_MOVE    32768    /* FS will handle d_move()
  115.                      * during rename() internally.
  116.                      */
  117.  
  118. /*
  119.  * These are the fs-independent mount-flags: up to 32 flags are supported
  120.  */
  121. #define MS_RDONLY     1    /* Mount read-only */
  122. #define MS_NOSUID     2    /* Ignore suid and sgid bits */
  123. #define MS_NODEV     4    /* Disallow access to device special files */
  124. #define MS_NOEXEC     8    /* Disallow program execution */
  125. #define MS_SYNCHRONOUS    16    /* Writes are synced at once */
  126. #define MS_REMOUNT    32    /* Alter flags of a mounted FS */
  127. #define MS_MANDLOCK    64    /* Allow mandatory locks on an FS */
  128. #define MS_DIRSYNC    128    /* Directory modifications are synchronous */
  129. #define MS_NOATIME    1024    /* Do not update access times. */
  130. #define MS_NODIRATIME    2048    /* Do not update directory access times */
  131. #define MS_BIND        4096
  132. #define MS_MOVE        8192
  133. #define MS_REC        16384
  134. #define MS_VERBOSE    32768    /* War is peace. Verbosity is silence.
  135.                    MS_VERBOSE is deprecated. */
  136. #define MS_SILENT    32768
  137. #define MS_POSIXACL    (1<<16)    /* VFS does not apply the umask */
  138. #define MS_UNBINDABLE    (1<<17)    /* change to unbindable */
  139. #define MS_PRIVATE    (1<<18)    /* change to private */
  140. #define MS_SLAVE    (1<<19)    /* change to slave */
  141. #define MS_SHARED    (1<<20)    /* change to shared */
  142. #define MS_RELATIME    (1<<21)    /* Update atime relative to mtime/ctime. */
  143. #define MS_KERNMOUNT    (1<<22) /* this is a kern_mount call */
  144. #define MS_I_VERSION    (1<<23) /* Update inode I_version field */
  145. #define MS_ACTIVE    (1<<30)
  146. #define MS_NOUSER    (1<<31)
  147.  
  148. /*
  149.  * Superblock flags that can be altered by MS_REMOUNT
  150.  */
  151. #define MS_RMT_MASK    (MS_RDONLY|MS_SYNCHRONOUS|MS_MANDLOCK|MS_I_VERSION)
  152.  
  153. /*
  154.  * Old magic mount flag and mask
  155.  */
  156. #define MS_MGC_VAL 0xC0ED0000
  157. #define MS_MGC_MSK 0xffff0000
  158.  
  159. /* Inode flags - they have nothing to superblock flags now */
  160.  
  161. #define S_SYNC        1    /* Writes are synced at once */
  162. #define S_NOATIME    2    /* Do not update access times */
  163. #define S_APPEND    4    /* Append-only file */
  164. #define S_IMMUTABLE    8    /* Immutable file */
  165. #define S_DEAD        16    /* removed, but still open directory */
  166. #define S_NOQUOTA    32    /* Inode is not counted to quota */
  167. #define S_DIRSYNC    64    /* Directory modifications are synchronous */
  168. #define S_NOCMTIME    128    /* Do not update file c/mtime */
  169. #define S_SWAPFILE    256    /* Do not truncate: swapon got its bmaps */
  170. #define S_PRIVATE    512    /* Inode is fs-internal */
  171.  
  172. /*
  173.  * Note that nosuid etc flags are inode-specific: setting some file-system
  174.  * flags just means all the inodes inherit those flags by default. It might be
  175.  * possible to override it selectively if you really wanted to with some
  176.  * ioctl() that is not currently implemented.
  177.  *
  178.  * Exception: MS_RDONLY is always applied to the entire file system.
  179.  *
  180.  * Unfortunately, it is possible to change a filesystems flags with it mounted
  181.  * with files in use.  This means that all of the inodes will not have their
  182.  * i_flags updated.  Hence, i_flags no longer inherit the superblock mount
  183.  * flags, so these have to be checked separately. -- rmk@arm.uk.linux.org
  184.  */
  185. #define __IS_FLG(inode,flg) ((inode)->i_sb->s_flags & (flg))
  186.  
  187. #define IS_RDONLY(inode) ((inode)->i_sb->s_flags & MS_RDONLY)
  188. #define IS_SYNC(inode)        (__IS_FLG(inode, MS_SYNCHRONOUS) || \
  189.                     ((inode)->i_flags & S_SYNC))
  190. #define IS_DIRSYNC(inode)    (__IS_FLG(inode, MS_SYNCHRONOUS|MS_DIRSYNC) || \
  191.                     ((inode)->i_flags & (S_SYNC|S_DIRSYNC)))
  192. #define IS_MANDLOCK(inode)    __IS_FLG(inode, MS_MANDLOCK)
  193. #define IS_NOATIME(inode)   __IS_FLG(inode, MS_RDONLY|MS_NOATIME)
  194. #define IS_I_VERSION(inode)   __IS_FLG(inode, MS_I_VERSION)
  195.  
  196. #define IS_NOQUOTA(inode)    ((inode)->i_flags & S_NOQUOTA)
  197. #define IS_APPEND(inode)    ((inode)->i_flags & S_APPEND)
  198. #define IS_IMMUTABLE(inode)    ((inode)->i_flags & S_IMMUTABLE)
  199. #define IS_POSIXACL(inode)    __IS_FLG(inode, MS_POSIXACL)
  200.  
  201. #define IS_DEADDIR(inode)    ((inode)->i_flags & S_DEAD)
  202. #define IS_NOCMTIME(inode)    ((inode)->i_flags & S_NOCMTIME)
  203. #define IS_SWAPFILE(inode)    ((inode)->i_flags & S_SWAPFILE)
  204. #define IS_PRIVATE(inode)    ((inode)->i_flags & S_PRIVATE)
  205.  
  206. /* the read-only stuff doesn't really belong here, but any other place is
  207.    probably as bad and I don't want to create yet another include file. */
  208.  
  209. #define BLKROSET   _IO(0x12,93)    /* set device read-only (0 = read-write) */
  210. #define BLKROGET   _IO(0x12,94)    /* get read-only status (0 = read_write) */
  211. #define BLKRRPART  _IO(0x12,95)    /* re-read partition table */
  212. #define BLKGETSIZE _IO(0x12,96)    /* return device size /512 (long *arg) */
  213. #define BLKFLSBUF  _IO(0x12,97)    /* flush buffer cache */
  214. #define BLKRASET   _IO(0x12,98)    /* set read ahead for block device */
  215. #define BLKRAGET   _IO(0x12,99)    /* get current read ahead setting */
  216. #define BLKFRASET  _IO(0x12,100)/* set filesystem (mm/filemap.c) read-ahead */
  217. #define BLKFRAGET  _IO(0x12,101)/* get filesystem (mm/filemap.c) read-ahead */
  218. #define BLKSECTSET _IO(0x12,102)/* set max sectors per request (ll_rw_blk.c) */
  219. #define BLKSECTGET _IO(0x12,103)/* get max sectors per request (ll_rw_blk.c) */
  220. #define BLKSSZGET  _IO(0x12,104)/* get block device sector size */
  221. #if 0
  222. #define BLKPG      _IO(0x12,105)/* See blkpg.h */
  223.  
  224. /* Some people are morons.  Do not use sizeof! */
  225.  
  226. #define BLKELVGET  _IOR(0x12,106,size_t)/* elevator get */
  227. #define BLKELVSET  _IOW(0x12,107,size_t)/* elevator set */
  228. /* This was here just to show that the number is taken -
  229.    probably all these _IO(0x12,*) ioctls should be moved to blkpg.h. */
  230. #endif
  231. /* A jump here: 108-111 have been used for various private purposes. */
  232. #define BLKBSZGET  _IOR(0x12,112,size_t)
  233. #define BLKBSZSET  _IOW(0x12,113,size_t)
  234. #define BLKGETSIZE64 _IOR(0x12,114,size_t)    /* return device size in bytes (u64 *arg) */
  235. #define BLKTRACESETUP _IOWR(0x12,115,struct blk_user_trace_setup)
  236. #define BLKTRACESTART _IO(0x12,116)
  237. #define BLKTRACESTOP _IO(0x12,117)
  238. #define BLKTRACETEARDOWN _IO(0x12,118)
  239. #define BLKDISCARD _IO(0x12,119)
  240.  
  241. #define BMAP_IOCTL 1        /* obsolete - kept for compatibility */
  242. #define FIBMAP       _IO(0x00,1)    /* bmap access */
  243. #define FIGETBSZ   _IO(0x00,2)    /* get the block size used for bmap */
  244.  
  245. #define    FS_IOC_GETFLAGS            _IOR('f', 1, long)
  246. #define    FS_IOC_SETFLAGS            _IOW('f', 2, long)
  247. #define    FS_IOC_GETVERSION        _IOR('v', 1, long)
  248. #define    FS_IOC_SETVERSION        _IOW('v', 2, long)
  249. #define FS_IOC_FIEMAP            _IOWR('f', 11, struct fiemap)
  250. #define FS_IOC32_GETFLAGS        _IOR('f', 1, int)
  251. #define FS_IOC32_SETFLAGS        _IOW('f', 2, int)
  252. #define FS_IOC32_GETVERSION        _IOR('v', 1, int)
  253. #define FS_IOC32_SETVERSION        _IOW('v', 2, int)
  254.  
  255. /*
  256.  * Inode flags (FS_IOC_GETFLAGS / FS_IOC_SETFLAGS)
  257.  */
  258. #define    FS_SECRM_FL            0x00000001 /* Secure deletion */
  259. #define    FS_UNRM_FL            0x00000002 /* Undelete */
  260. #define    FS_COMPR_FL            0x00000004 /* Compress file */
  261. #define FS_SYNC_FL            0x00000008 /* Synchronous updates */
  262. #define FS_IMMUTABLE_FL            0x00000010 /* Immutable file */
  263. #define FS_APPEND_FL            0x00000020 /* writes to file may only append */
  264. #define FS_NODUMP_FL            0x00000040 /* do not dump file */
  265. #define FS_NOATIME_FL            0x00000080 /* do not update atime */
  266. /* Reserved for compression usage... */
  267. #define FS_DIRTY_FL            0x00000100
  268. #define FS_COMPRBLK_FL            0x00000200 /* One or more compressed clusters */
  269. #define FS_NOCOMP_FL            0x00000400 /* Don't compress */
  270. #define FS_ECOMPR_FL            0x00000800 /* Compression error */
  271. /* End compression flags --- maybe not all used */
  272. #define FS_BTREE_FL            0x00001000 /* btree format dir */
  273. #define FS_INDEX_FL            0x00001000 /* hash-indexed directory */
  274. #define FS_IMAGIC_FL            0x00002000 /* AFS directory */
  275. #define FS_JOURNAL_DATA_FL        0x00004000 /* Reserved for ext3 */
  276. #define FS_NOTAIL_FL            0x00008000 /* file tail should not be merged */
  277. #define FS_DIRSYNC_FL            0x00010000 /* dirsync behaviour (directories only) */
  278. #define FS_TOPDIR_FL            0x00020000 /* Top of directory hierarchies*/
  279. #define FS_EXTENT_FL            0x00080000 /* Extents */
  280. #define FS_DIRECTIO_FL            0x00100000 /* Use direct i/o */
  281. #define FS_RESERVED_FL            0x80000000 /* reserved for ext2 lib */
  282.  
  283. #define FS_FL_USER_VISIBLE        0x0003DFFF /* User visible flags */
  284. #define FS_FL_USER_MODIFIABLE        0x000380FF /* User modifiable flags */
  285.  
  286.  
  287. #define SYNC_FILE_RANGE_WAIT_BEFORE    1
  288. #define SYNC_FILE_RANGE_WRITE        2
  289. #define SYNC_FILE_RANGE_WAIT_AFTER    4
  290.  
  291. #endif /* _LINUX_FS_H */
  292.